home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 August: Tool Chest / Dev.CD Aug 94.toast / Tool Chest / Games / Game Sample Code / SpriteWorld 1.0b3 / ** A bug in SpriteWorld? < prev   
Encoding:
Text File  |  1993-09-23  |  1.3 KB  |  53 lines  |  [TEXT/ttxt]

  1. There is indeed a bug in SWCloneSprite. The frameArray field is
  2. no getting copied properly. Below is a fixed version. I haven't tested this
  3. at all, so be careful. Hope this helps.
  4.  
  5. ...Tony
  6.  
  7. SW_PASCAL OSErr SWCloneSprite(
  8.     SpritePtr cloneSpriteP,
  9.     SpritePtr* newSpriteP,
  10.     void* spriteStorageP)
  11. {
  12.     OSErr err;
  13.     SpritePtr tempSpriteP;
  14.     TimeTaskRec moveTimeTask, frameTimeTask;
  15.     short frame;
  16.   FramePtr *tempFrameArray; 
  17.  
  18.     err = SWCreateSprite(&tempSpriteP, spriteStorageP,
  19. cloneSpriteP->maxFrames);
  20.  
  21.     if (err == noErr)
  22.     {
  23.             // save off the time tasks, these are unique to a particular sprite
  24.         moveTimeTask = tempSpriteP->moveTimeTask;
  25.         frameTimeTask = tempSpriteP->frameTimeTask;
  26.  
  27.             // copy the clone sprite into the temp sprite
  28.     tempFrameArray = tempSpriteP->frameArray;    //  save off the frame
  29. array ptr
  30.         *tempSpriteP = *cloneSpriteP;
  31.     tempSpriteP->frameArray = tempFrameArray;    //  restore the frame
  32. array ptr
  33.  
  34.             // restore the time tasks
  35.         tempSpriteP->moveTimeTask = moveTimeTask;
  36.         tempSpriteP->frameTimeTask = frameTimeTask;
  37.  
  38.             // clear the next and prev fields, just in case
  39.         tempSpriteP->nextSpriteP = NULL;
  40.         tempSpriteP->prevSpriteP = NULL;
  41.  
  42.             // copy the frame array
  43.         for (frame = 0; frame < tempSpriteP->maxFrames; frame++)
  44.         {
  45.             tempSpriteP->frameArray[frame] = cloneSpriteP->frameArray[frame];
  46.         }
  47.  
  48.         *newSpriteP = tempSpriteP;
  49.     }
  50.  
  51.     return err;
  52. }
  53.